const marked = require('marked')
const xss = require('xss')
const Ep = require('../lib/mongo').Ep

// 将 comment 的 content 从 markdown 转换成 html
Ep.plugin('contentToHtml', {
  afterFind: (eps) => {
    return eps.map((ep) => {
      ep.content = marked(xss(ep.content))
      return ep
    })
  }
})

module.exports = {
  // 创建一个留言
  create: function create (ep) {
    return Ep.create(ep).exec()
  },

  // 通过留言 id 获取一个留言
  getEpById: function getEpById (epId) {
    return Ep.findOne({ _id: epId }).exec()
  },

  // 通过文章 id 给 pv 加 1
  incPv: function incPv (epId) {
    return Ep
      .update({ _id: epId }, { $inc: { pv: 1 } })
      .exec()
  },

  // 通过文章 id 获取一篇原生文章（编辑文章）
  getRawEpById: function getRawEpById (epId) {
    return Ep
      .findOne({ _id: epId })
      .populate({ path: 'author', model: 'User' })
      .exec()
  },

  // 通过文章 id 更新一篇文章
  updateEpById: function updateEpById (epId, data) {
    return Ep.update({ _id: epId }, { $set: data }).exec()
  },

  // 通过留言 id 删除一个留言
  delEpById: function delEpById (commentId) {
    return Ep.deleteOne({ _id: commentId }).exec()
  },

  // 通过文章 id 删除该文章下所有留言
  delEpsByPostId: function delEpsByPostId (acId) {
    return Ep.deleteMany({ acId: acId }).exec()
  },

  // 通过文章 id 获取该文章下所有留言，按留言创建时间升序
  getEp: function getEp (acId) {
    return Ep
      .find({ acId: acId })
      .populate({ path: 'author', model: 'User' })
      .sort({ _id: 1 })
      .addCreatedAt()
      .contentToHtml()
      .exec()
  },

  // 通过动漫 id 获取该文章下剧集数
  getEpsCount: function getEpsCount (acId) {
    return Ep.count({ acId: acId }).exec()
  }
}
